﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DevEx.Thanh.Class;
using DevExpress.XtraBars;
using DevExpress.XtraBars.Ribbon;
using DevExpress.XtraEditors;

namespace DevEx.Thanh.UserControl
{
    public partial class ucRoleMenu : DevExpress.XtraEditors.XtraUserControl
    {
        private CMenuController ctrlMenu = new CMenuController();
        private CRoleMenuController ctrlRoleMenu = new CRoleMenuController();
        private int _curIDRole = -1;
        private frmMain _frmMain =null;
        public ucRoleMenu(frmMain _frm)
        {
            InitializeComponent();
            _frmMain  = _frm;
        }

        private void ucRoleMenu_Load(object sender, EventArgs e)
        {
            BindMenuToCheckBox();
            CViewer.BindRoleToComboBox(cboRole);
            
        }
        private void UnSellectAll()
        {
            for (int i = 0; i <= chkQuyen .Items.Count - 1; i++)
            {
                chkQuyen.SetItemChecked(i, false);
            }
        }
        private void SellectAll()
        {
            for (int i = 0; i <= chkQuyen.Items.Count - 1; i++)
            {
                chkQuyen.SetItemChecked(i, true);
            }
        }
        private void BindMenuToCheckBox()
        {
            chkQuyen.Items.Clear();
            IQueryable<tblMenu> listMenu = ctrlMenu.SelectAllRecord();
            foreach (tblMenu m in listMenu)
            {
                chkQuyen.Items.Add(m.MenuText);
            }
        }
        private void CapNhatMenuTheoNhom()
        {
            //bỏ tất cả các lựa chọn trước
            UnSellectAll();
            //set lại check theo role
            if ((_curIDRole != -1))
            {
                for (int i = 0; i <= chkQuyen.Items.Count - 1; i++)
                {
                    string menuName = chkQuyen.Items[i].ToString();
                    if (ctrlRoleMenu.CheckMenuInRoleByName(_curIDRole, menuName) == true)
                    {
                        chkQuyen.SetItemChecked(i, true);
                    }
                }
            }
        }

        private void btSave_Click(object sender, EventArgs e)
        {
            if ((cboRole.ItemIndex != -1))
            {
                //xóa hết các quyền cũ đi
                ctrlRoleMenu.DeleteAllByRole(_curIDRole);
                //cập nhật quyền mới
                BaseCheckedListBoxControl.CheckedItemCollection checked_items = chkQuyen.CheckedItems;
                foreach (object item in checked_items)
                {
                    string menuText = item.ToString();
                    tblMenu menu = ctrlMenu.SelectRecordByCaption(menuText);
                    tblRoleMenu roleMenu = new tblRoleMenu();
                    roleMenu.ID_Role = (int)cboRole.EditValue ;
                    roleMenu.ID_Menu = menu.ID_Menu;
                    ctrlRoleMenu.InsertRecord(roleMenu);
                }
                MessageBox.Show("Đã cập nhật quyền cho nhóm " + cboRole.Text);
            }
        }

        private void btCancel_Click(object sender, EventArgs e)
        {
            BindMenuToCheckBox();
            CapNhatMenuTheoNhom();
        }

        private void btRefresh_Click(object sender, EventArgs e)
        {
            RibbonControl ribbon = _frmMain .GetRibbon();
            //duyệt qua từng cái page và cái item
            foreach (RibbonPage p in ribbon.Pages)
            {
                foreach (RibbonPageGroup pg in p.Groups)
                {
                    foreach (BarItemLink button in pg.ItemLinks.OfType<DevExpress.XtraBars.BarItemLink>())
                    {
                        try
                        {
                            //kiểm tra xem nó đã tồn tại chưa
                            //nếu chưa có thì insert nó vào dữ liệu
                            if (button.Caption != "" && button.Caption != "ribbonGalleryBarItem1" && ctrlMenu.CheckExists(button.Caption) == false)
                            {
                                tblMenu menu = new tblMenu();
                                menu.MenuName = button.ItemId.ToString();
                                menu.MenuText = button.Caption;
                                ctrlMenu.InsertRecord(menu);
                            }
                        }
                        catch (Exception ex)
                        {
                        }
                    }
                }
            } 
            
            //sau khi insert xong load lại
            BindMenuToCheckBox();
            CapNhatMenuTheoNhom();
        }

        private void btCheckAll_Click(object sender, EventArgs e)
        {
            SellectAll();
        }

        private void btUncheckAll_Click(object sender, EventArgs e)
        {
            UnSellectAll();
        }

        private void cboRole_EditValueChanged(object sender, EventArgs e)
        {
            if ((cboRole.ItemIndex != -1))
            {
                try
                {
                    _curIDRole = (int)cboRole.EditValue;
                    CapNhatMenuTheoNhom();
                }
                catch (Exception ex)
                {
                    UnSellectAll();
                }
            }
            else
            {
                UnSellectAll();
            }
        }
    }
}
